_gggg_eeee_tttt_uuuu_tttt_xxxx_eeee_nnnn_tttt, _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd, and _gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee each return a pointer to a _uuuu_tttt_mmmm_pppp_xxxx
_gggg_eeee_tttt_uuuu_tttt_xxxx_eeee_nnnn_tttt reads the next entry from a _uuuu_tttt_mmmm_pppp_xxxx-like file. If the file is
not already open, it opens it. If it reaches the end of the file, it
fails.
_gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd searches forward from the last entry read or, if no entries have
been read, from the first entry in the _uuuu_tttt_mmmm_pppp_xxxx file until it finds an entry
with a _uuuu_tttt______tttt_yyyy_pppp_eeee matching _i_d->_uuuu_tttt______tttt_yyyy_pppp_eeee if the type specified is _RRRR_UUUU_NNNN______LLLL_VVVV_LLLL_,,,,
_BBBB_OOOO_OOOO_TTTT______TTTT_IIII_MMMM_EEEE_,,,, _OOOO_LLLL_DDDD______TTTT_IIII_MMMM_EEEE, or _NNNN_EEEE_WWWW______TTTT_IIII_MMMM_EEEE_.... If the type specified in _i_d is
_IIII_NNNN_IIII_TTTT______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS_,,,, _LLLL_OOOO_GGGG_IIII_NNNN______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS_,,,, _UUUU_SSSS_EEEE_RRRR______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS, or _DDDD_EEEE_AAAA_DDDD______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS, then _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd
will return a pointer to the first entry whose type is one of these four
and whose _u_t__i_d field matches _i_d->_uuuu_tttt______iiii_dddd. If the end of file is reached
without a match, it fails.
_gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee searches forward from the last entry read or, if no entries
have been read, from the first entry in the _uuuu_tttt_mmmm_pppp_xxxx file until it finds an
entry of the type _LLLL_OOOO_GGGG_IIII_NNNN______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS or _UUUU_SSSS_EEEE_RRRR______PPPP_RRRR_OOOO_CCCC_EEEE_SSSS_SSSS which also has a _u_t__l_i_n_e
string matching the _l_i_n_e->_uuuu_tttt______llll_iiii_nnnn_eeee string. If the end of file is reached
without a match, it fails.
_pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee writes the supplied _uuuu_tttt_mmmm_pppp_xxxx structure into the _uuuu_tttt_mmmm_pppp_xxxx file. It
uses _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd to search forward for the proper place if it finds that it
is not already at the proper place. It is expected that normally the
user of _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee will have searched for the proper entry using one of
the _gggg_eeee_tttt_uuuu_tttt_xxxx routines. If so, _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee will not search. If _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee
does not find a matching slot for the new entry, it will append a new
entry to the end of the file. It returns a pointer to the _uuuu_tttt_mmmm_pppp_xxxx
structure.
_ssss_eeee_tttt_uuuu_tttt_xxxx_eeee_nnnn_tttt resets the input stream to the beginning of the file. This
should be done before each search for a new entry if it is desired that
the entire file be examined.
_eeee_nnnn_dddd_uuuu_tttt_xxxx_eeee_nnnn_tttt closes the currently open file.
_uuuu_tttt_mmmm_pppp_xxxx_nnnn_aaaa_mmmm_eeee allows the user to change the name of the file examined, from
_////_vvvv_aaaa_rrrr_////_aaaa_dddd_mmmm_////_uuuu_tttt_mmmm_pppp_xxxx to any other file. It is most often expected that this
other file will be _////_vvvv_aaaa_rrrr_////_aaaa_dddd_mmmm_////_wwww_tttt_mmmm_pppp_xxxx. If the file does not exist, this will
not be apparent until the first attempt to reference the file is made.
_uuuu_tttt_mmmm_pppp_xxxx_nnnn_aaaa_mmmm_eeee does not open the file. It just closes the old file if it is
currently open and saves the new file name. The new file name must end
with the character ``_xxxx'' to allow the name of the corresponding _uuuu_tttt_mmmm_pppp file
to be easily obtainable (otherwise an error code of 1 is returned).
_gggg_eeee_tttt_uuuu_tttt_mmmm_pppp copies the information stored in the fields of the _uuuu_tttt_mmmm_pppp_xxxx
structure to the corresponding fields of the _uuuu_tttt_mmmm_pppp structure. If the
information in any field of _uuuu_tttt_mmmm_pppp_xxxx does not fit in the corresponding _uuuu_tttt_mmmm_pppp
field, the data is truncated.
_gggg_eeee_tttt_uuuu_tttt_mmmm_pppp_xxxx copies the information stored in the fields of the _uuuu_tttt_mmmm_pppp
structure to the corresponding fields of the _uuuu_tttt_mmmm_pppp_xxxx structure.
A null pointer is returned upon failure to read, whether for permissions
or having reached the end of file, or upon failure to write.
WWWWAAAARRRRNNNNIIIINNNNGGGG
All changes to _////_vvvv_aaaa_rrrr_////_aaaa_dddd_mmmm_////_wwww_tttt_mmmm_pppp must also be logged in _////_vvvv_aaaa_rrrr_////_aaaa_dddd_mmmm_////_wwww_tttt_mmmm_pppp_xxxx. Most
commands that extract information from these files silently discard all
_wwww_tttt_mmmm_pppp_xxxx entries without corresponding _wwww_tttt_mmmm_pppp entries.
NNNNOOOOTTTTEEEESSSS
The most current entry is saved in a static structure. Multiple accesses
require that it be copied before further accesses are made. On each call
to either _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd or _gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee, the routine examines the static
structure before performing more I/O. If the contents of the static
structure match what it is searching for, it looks no further. For this
reason, to use _gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee to search for multiple occurrences it would be
necessary to zero out the static after each success, or _gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee would
just return the same structure over and over again. There is one
exception to the rule about emptying the structure before further reads
are done. The implicit read done by _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee (if it finds that it is
not already at the correct place in the file) will not alter the contents
of the static structure returned by the _gggg_eeee_tttt_uuuu_tttt_xxxx_eeee_nnnn_tttt, _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd, or
_gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee routines, if the user has just modified those contents and
passed the pointer back to _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee.
_gggg_eeee_tttt_uuuu_tttt_xxxx_eeee_nnnn_tttt, _gggg_eeee_tttt_uuuu_tttt_xxxx_iiii_dddd, _gggg_eeee_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee, and _pppp_uuuu_tttt_uuuu_tttt_xxxx_llll_iiii_nnnn_eeee, place file locks on the
used during function execution. File locks are not held across calls to
these or other functions, but signals may interrupt the execution of
these functions allowing file locks to be held. When using these
functions where a signal may interrupt function execution, _eeee_nnnn_dddd_uuuu_tttt_xxxx_eeee_nnnn_tttt
should be called by signal handlers to release any file locks acquired by